{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#  第八步：调整gamma的参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-05T00:54:26.531279Z",
     "start_time": "2018-01-05T00:54:25.733431Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 读取数据 & 数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-05T00:54:29.092898Z",
     "start_time": "2018-01-05T00:54:27.882562Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "data = pd.read_csv(dpath + 'RentListingInquries_FE_train.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-05T00:54:31.681336Z",
     "start_time": "2018-01-05T00:54:29.981785Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.0         1   2950      1475.000000     1475.000000        0.0   \n",
       "1        1.0         2   2850      1425.000000      950.000000       -1.0   \n",
       "2        1.0         1   3758      1879.000000     1879.000000        0.0   \n",
       "3        1.0         2   3300      1650.000000     1100.000000       -1.0   \n",
       "4        2.0         2   4900      1633.333333     1633.333333        0.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       2.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   24  ...         0     0      0    1       0      0   \n",
       "2       2.0  2016      6    3  ...         0     0      0    0       0      0   \n",
       "3       3.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "4       4.0  2016      4   12  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           1     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "target = pd.read_csv(dpath + 'RentListingInquries_FE_test.csv')\n",
    "target.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-05T00:54:31.996360Z",
     "start_time": "2018-01-05T00:54:31.814087Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:517: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  self.obj[item] = s\n"
     ]
    }
   ],
   "source": [
    "def remove_noise(df):\n",
    "#remove some noise\n",
    "    df= df[df.price < 10000]\n",
    "\n",
    "    df.loc[df[\"bathrooms\"] == 112, \"bathrooms\"] = 1.5\n",
    "    df.loc[df[\"bathrooms\"] == 10, \"bathrooms\"] = 1\n",
    "    df.loc[df[\"bathrooms\"] == 20, \"bathrooms\"] = 2\n",
    "    return df\n",
    "data = remove_noise(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-05T00:54:33.943822Z",
     "start_time": "2018-01-05T00:54:33.888661Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = data['interest_level']\n",
    "X_train = data.drop('interest_level',axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-05T00:54:35.812124Z",
     "start_time": "2018-01-05T00:54:35.517311Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 数据标准化 \n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-05T00:57:08.047531Z",
     "start_time": "2018-01-05T00:57:08.019359Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)\n",
    "kfold = list(kfold.split(X_train,y_train))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-05T00:57:09.541252Z",
     "start_time": "2018-01-05T00:57:09.532634Z"
    },
    "run_control": {
     "marked": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'gamma': [0, 0.01, 0.03, 0.1, 0.3, 1, 2]}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gamma = [0,0.01, 0.03, 0.1,0.3, 1,2]\n",
    "\n",
    "param_test8_1 = dict(gamma=gamma)\n",
    "param_test8_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-05T04:23:18.572777Z",
     "start_time": "2018-01-05T00:57:15.441423Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58831, std: 0.00486, params: {'gamma': 0},\n",
       "  mean: -0.58835, std: 0.00492, params: {'gamma': 0.01},\n",
       "  mean: -0.58830, std: 0.00483, params: {'gamma': 0.03},\n",
       "  mean: -0.58837, std: 0.00481, params: {'gamma': 0.1},\n",
       "  mean: -0.58832, std: 0.00481, params: {'gamma': 0.3},\n",
       "  mean: -0.58853, std: 0.00473, params: {'gamma': 1},\n",
       "  mean: -0.59027, std: 0.00472, params: {'gamma': 2}],\n",
       " {'gamma': 0.03},\n",
       " -0.5883023650713527)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb8_1 = XGBClassifier(\n",
    "        learning_rate =0.01,\n",
    "        n_estimators=3000,\n",
    "        max_depth=6,\n",
    "        min_child_weight=2,\n",
    "        gamma=0,\n",
    "        subsample=0.9,\n",
    "        colsample_bytree=0.6,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        reg_alpha= 2,\n",
    "        reg_lambda= 0.5,\n",
    "        seed=3)\n",
    "\n",
    "gsearch8_1 = GridSearchCV(xgb8_1, param_grid = param_test8_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch8_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch8_1.grid_scores_, gsearch8_1.best_params_,     gsearch8_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-05T05:00:42.117665Z",
     "start_time": "2018-01-05T05:00:41.753215Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.588302 using {'gamma': 0.03}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nE35LT3/dAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a0fed1cc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch8_1.best_score_, gsearch8_1.best_params_))\n",
    "test_means = gsearch8_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch8_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch8_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch8_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pyplot.plot(gamma, -test_means)\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'gamma' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'gamma.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "调整gamma似乎没有降低logless"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  },
  "latex_envs": {
   "LaTeX_envs_menu_present": true,
   "autocomplete": true,
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 1,
   "hotkeys": {
    "equation": "Ctrl-E",
    "itemize": "Ctrl-I"
   },
   "labels_anchors": false,
   "latex_user_defs": false,
   "report_style_numbering": false,
   "user_envs_cfg": false
  },
  "nbTranslate": {
   "displayLangs": [
    "*"
   ],
   "hotkey": "alt-t",
   "langInMainMenu": true,
   "sourceLang": "en",
   "targetLang": "fr",
   "useGoogleTranslate": true
  },
  "toc": {
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": "block",
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
